/*
 * INSANE - Interactive Structural Analysis Environment
 *
 * Copyright (C) 2003-2004
 * Universidade Federal de Minas Gerais
 * Escola de Engenharia
 * Departamento de Engenharia de Estruturas
 *
 * Author's email :     insane@dees.ufmg.br
 * Author's Website :   http://www.dees.ufmg.br/insane
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-
 * 1307, USA.
 *
 */

package br.ufmg.dees.insane.ui.rich.postp.postp_view.command;

import java.util.ArrayList;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import br.ufmg.dees.insane.commons.command.Command;
import br.ufmg.dees.insane.commons.view.ViewState;
import br.ufmg.dees.insane.model.postp.GeoPostpModel;
import br.ufmg.dees.insane.model.postp.Patch;
import br.ufmg.dees.insane.model.postp.PostpModel;
import br.ufmg.dees.insane.model.postp.StepPostp;
import br.ufmg.dees.insane.ui.rich.postp.postp_view.DesktopPostp;
import br.ufmg.dees.insane.ui.rich.postp.postp_view.InterfacePostp;
import br.ufmg.dees.insane.ui.rich.postp.postp_view.dialog.DiscontinuosElementsContourDialog;

public class DiscontinuosElementsContourSelectionCommand implements Command {
	
	private DesktopPostp parent;
	private StepPostp model;
	private PostpModel postpModel;
	private ViewState vs;
	
	/** Creates new MeshStateListCommand */
	public DiscontinuosElementsContourSelectionCommand(JFrame parent) {
		this.parent = (DesktopPostp)parent;
		this.vs = this.parent.getView().getViewState();
	}
	
//	************************************************************************************************************************	
	
	public void execute() {
		if(((InterfacePostp)((JDesktopPane)this.parent.getDesktop()).getSelectedFrame())!=null){
			ArrayList<String> keys = new ArrayList<String>();
			this.vs = ((InterfacePostp)((JDesktopPane)this.parent.getDesktop()).getSelectedFrame()).getView().getViewState();
			this.model = ((InterfacePostp)((JDesktopPane)this.parent.getDesktop()).getSelectedFrame()).getModel();
			this.postpModel = ((InterfacePostp)((JDesktopPane)this.parent.getDesktop()).getSelectedFrame()).getPostpModel();
			for(int i =0;i<((GeoPostpModel)this.model.getGeoPostpModelList().get(0)).getPatches().size();i++){
                Patch p = ((GeoPostpModel)this.model.getGeoPostpModelList().get(0)).getPatches().get(i);
				for(int j=0;j<p.getValues().size();j++){
                    String key = (String)(p.getValues()).keySet().toArray()[j];
                    if(key!="Incidence"){
                        //add the keys if only the keys wasn't add yet.
                        if(!this.checkKey(keys,key)){
                            keys.add(key);
                        }
                    }
				}
			}
			String[] keysString = new String[keys.size()];
			for(int k=0;k<keys.size();k++){
				keysString[k]=(String)keys.get(k);
			}
			DiscontinuosElementsContourDialog dlg = new DiscontinuosElementsContourDialog(keysString,this.vs);
			dlg.setDesktop(this.parent);
			dlg.setPostpModel(this.postpModel);
			dlg.setStePostp(this.model);
		}else{
			String message = "Select a Frame!";
			JOptionPane.showMessageDialog(this.parent.getDesktop(), message, "Error Message", JOptionPane.ERROR_MESSAGE);
		}
	}
	
	public boolean checkKey(ArrayList list,String s){
		for(int i=0;i<list.size();i++){
			if(((String)list.get(i)).equals(s)){
				return true;
			}
		}
		return false;
	}
	
//	************************************************************************************************************************	
	public void undo() {
	}
	
	public void redo() {
	}
	
	/**
	 * The method return the model.
	 * @return Returns The model.
	 */
	public StepPostp getModel() {
		return model;
	}
	
	/**
	 * The method set the field model from the parameter model.
	 * @param model The model to set.
	 */
	public void setModel(StepPostp model) {
		this.model = model;
	}
	
	/**
	 * The method return the postpModel.
	 * @return Returns The postpModel.
	 */
	public PostpModel getPostpModel() {
		return postpModel;
	}
	
	/**
	 * The method set the field postpModel from the parameter postpModel.
	 * @param postpModel The postpModel to set.
	 */
	public void setPostpModel(PostpModel postpModel) {
		this.postpModel = postpModel;
	}
	
//	*************************************************************************************************************************	
	
}



